package com.wushijia.highconcurrency.forkjoin;

interface Test {

  static void reset() {
    System.out.println("接口中的静态方法reset");
  }

  default void f1() {
    System.out.println("接口中的默认方法f1");
  }

  void f2();
}

abstract class AbstractTest implements Test {

  @Override
  public void f2() {
    System.out.println("抽象类中的f2方法");
  }
}

public class Demo2 {

  private static String name = "demo2";

  public static void main(String[] args) {
    userInterface();
    System.out.println(name.intern().equals(InnerClass.print()));
  }

  private static void userInterface() {
    //接口的匿名内部类
    new AbstractTest() {
      @Override
      public void f2() {
        System.out.println("匿名内部类的f2方法");
      }
    }.f2();

    Test testInstance = new Test() {
      @Override
      public void f2() {
        System.out.println("匿名内部类实现接口中的f2方法");
      }
    };
    testInstance.f1();
    testInstance.f2();

    //抽象类的匿名内部类
    Test test = new AbstractTest() {
      @Override
      public void f2() {
        System.out.println("匿名内部类实现抽象类中的f2方法");
      }
    };
    //通过匿名子类对象，调用父类中的方法
    test.f1();
    test.f2();

    Test.reset();
  }

  //内部类的唯一好处就是可以方便地访问外部类中的私有属性。
  private static class InnerClass{
    private static String print(){
      return name;
    }
  }
}
